Memory system and operating method thereof

ABSTRACT

A memory system includes a memory controller including: a system error correction code generation circuit configured to generate a first system error correction code and a second system error correction code based on write data; and a memory including: a memory error correction code generation circuit configured to generate a first memory error correction code based on the write data transferred from the memory controller, and generate a second memory error correction code based on the second system error correction code transferred from the memory controller, and a memory core configured to store the write data, the first system error correction code, the second system error correction code, the first memory error correction code and the second memory error correction code.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application claims the benefit of U.S. Provisional Application No. 62/673,333, filed on May 18, 2018, and U.S. Provisional Application No. 62/838,144, filed on Apr. 24, 2019, the entire contents of which are incorporated herein by reference.

BACKGROUND 1. Field

Various embodiments of the present invention relate to a memory system.

2. Discussion of the Related Art

In the past, the semiconductor memory industry was able to produce a number of original good dies on a wafer, each of which has no defective memory cell through a semiconductor fabrication process. However, as the capacity of a memory increases, it becomes more difficult to fabricate a memory having no defective memory cell, and it is unlikely that such an error-free memory may be fabricated. As a way to overcome this concern, a repair method of replacing defective memory cells with redundancy memory cells included in a memory device, is being used.

As another way, an error occurred in a memory cell and an error occurred while data is transmitted in a read operation and a write operation of a memory system are corrected by using an error correction circuit (ECC circuit) which corrects an error in the memory system.

SUMMARY

Various embodiments are directed to providing a technology capable of improving error correction efficiency in a memory system.

In an embodiment, a memory system may include a memory controller including: a system error correction code generation circuit configured to generate a first system error correction code and a second system error correction code based on write data; and a memory including: a memory error correction code generation circuit configured to generate a first memory error correction code based on the write data transferred from the memory controller, and generate a second memory error correction code based on the second system error correction code transferred from the memory controller, and a memory core configured to store the write data, the first system error correction code, the second system error correction code, the first memory error correction code and the second memory error correction code.

In an embodiment, a method for operating a memory system including a memory controller and a memory may include: generating, by the memory controller, a first system error correction code and a second system error correction code based on write data; transferring, by the memory controller, the write data, the first system error correction code and the second system error correction code to the memory from; generating, by the memory, a first memory error correction code based on the write data transferred from the memory controller; generating, by the memory, a second memory error correction code based on the second system error correction code transferred from the memory controller; and storing, by the memory, the write data, the first system error correction code, the second system error correction code, the first memory error correction code and the second memory error correction code, in a memory core included in the memory.

In an embodiment a memory system may include a memory controller configured to generate a first system error correction code and a second system error correction code based on data to be written, in a write operation; and a memory: in the write operation, configured to generate a first memory error correction code based on the data transferred from the memory controller, and generate a second memory error correction code based on the second system error correction code transferred from the memory controller, and store the data, the first and second system error correction codes and the first and second memory error correction codes, in a memory core included in the memory, and in a read operation, configured to correct an error of the data and the first system error correction code which are read from the memory core, based on the first system error correction code and the first memory error correction code which are read from the memory core, correct an error of the second system error correction code read from the memory core, based on the second memory error correction code read from the memory core, and transfer the error-corrected data and the error-corrected first and second system error correction codes to the memory controller.

According to the embodiments, error correction efficiency in a memory system may be improved.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram illustrating a memory system in accordance with an embodiment of the present invention.

FIG. 2 is a diagram illustrating an encoding target in the memory system shown in FIG. 1.

FIGS. 3A and 3B are diagrams for describing a possible concern of error correction in the memory system shown in FIG. 1.

FIG. 4 is a block diagram illustrating a memory system in accordance with an embodiment the present invention.

FIG. 5 is a diagram illustrating an encoding target in the memory system shown in FIG. 4.

FIG. 6 is a diagram for describing a process for a system error correction code generation circuit shown in FIG. 4 to generate a first system error correction code.

FIG. 7 is a diagram for describing a process for the system error correction code generation circuit shown in FIG. 4 to generate a second system error correction code.

FIG. 8 is a diagram for describing a process for a memory error correction code generation circuit shown in FIG. 4 to generate a memory error correction code.

FIG. 9 is a diagram for describing a process for a memory error correction circuit shown in FIG. 4 to detect and correct an error.

FIG. 10 is a block diagram illustrating a memory system in accordance with an embodiment of the present invention.

FIG. 11 is a diagram illustrating an encoding target in the memory system shown in FIG. 10.

FIG. 12 is a diagram for describing a process for a system error correction code generation circuit shown in FIG. 10 to generate a first system error correction code and a second system error correction code.

FIG. 13 is a diagram for describing a process for a memory error correction code generation circuit shown in FIG. 10 to generate a first memory error correction code.

FIG. 14 is a diagram for describing a process for the memory error correction code generation circuit shown in FIG. 10 to generate a second memory error correction code.

DETAILED DESCRIPTION

Various embodiments will be described below in more detail with reference to the accompanying drawings. The present invention may, however, be embodied in different forms and should not be construed as limited to the embodiments set forth herein. Rather, these embodiments are provided so that this disclosure will be thorough and complete, and will fully convey the scope of the present invention to those skilled in the art. Throughout the disclosure, like reference numerals refer to like parts throughout the various figures and embodiments of the present invention.

It is noted that reference to “an embodiment” does not necessarily mean only one embodiment, and different references to “an embodiment” are not necessarily to the same embodiment(s). Further, it will be understood that, although the terms “first” and/or “second” may be used herein to describe various elements, these elements should not be limited by these terms. These terms are only used to distinguish one element, from another element. For instance, a first element discussed below could be termed a second element without departing from the teachings of the present disclosure. Similarly, the second element could also be termed the first element.

In the present disclosure, the singular forms are intended to include the plural forms as well, unless the context clearly indicates otherwise.

It will be further understood that the terms “comprise”, “include”, “have”, etc. when used in this specification, specify the presence of stated features, numbers, steps, operations, elements, components, and/or combinations of them but do not preclude the presence or addition of one or more other features, numbers, steps, operations, elements, components, and/or combinations thereof.

The above-described embodiments are merely for the purpose of understanding the technical spirit of the present disclosure and the scope of the present disclosure should not be limited to the above-described embodiments. It will be obvious to those skilled in the art to which the present disclosure pertains that other modifications based on the technical spirit of the present disclosure may be made in addition to the above-described embodiments.

Unless otherwise defined, all terms including technical and scientific terms used herein have the same meaning as commonly understood by one of ordinary skill in the art to which the present disclosure belongs. Unless otherwise defined in the present disclosure, the terms should not be construed as being ideal or excessively formal. In addition, as used herein, singular forms may include the plural forms as well and vice versa, unless the context clearly indicates otherwise. The articles ‘a’ and ‘an’ as used in this application and the appended claims should generally be construed to mean ‘one or more’ unless specified otherwise or clear from context to be directed to a singular form.

Hereinafter, the various embodiments of the present invention will be described in detail with reference to the attached drawings.

FIG. 1 is a diagram illustrating a memory system 100 in accordance with an embodiment of the present invention. FIG. 1 illustrates only components which are directly related to storage of data and error correction of data in the memory system 100.

Referring to FIG. 1, the memory system 100 may include a memory controller 110 and a memory 150.

The memory controller 110 may control the operations of the memory 150, such as read and write operations, according to a request of a host. The host may include a central processing unit (CPU), a graphic processing unit (GPU), an application processor (AP) or the like. The memory controller 110 may be embedded inside the host or may exist separately outside the host. In the case where the memory controller 110 is embedded inside the host, host data HOST_DATA in the drawing may represent data which the memory controller 110 communicates with the other components of the host in the host. In the case where the memory controller 110 exists outside the host, the host data HOST_DATA in the drawing may represent data which the memory controller 110 communicates with the host. The memory controller 110 may include a system error correction code (ECC) generation circuit 111 and a system error correction circuit 112. The system ECC generation circuit 111 may generate a system error correction code ECC_SYS in a write operation. The system error correction circuit 112 may correct an error of data DATA by using the system error correction code ECC_SYS in a read operation.

The memory 150 may store write data DATA and the system error correction code ECC_SYS received from the memory controller 110 in the write operation, and may transfer read data DATA and the system error correction code ECC_SYS stored in the memory 150 to the memory controller 110 in the read operation. The memory 150 may be one of all types of memories such as a dynamic random access memory (DRAM), a high bandwidth memory (HBM), a phase change random access memory (PCRAM) and a flash memory. The memory 150 may include a memory error correction code (ECC) generation circuit 151, a memory error correction circuit 152 and a memory core 153. The memory ECC generation circuit 151 may generate a memory error correction code ECC_MEM in the write operation. The memory error correction circuit 152 may correct an error of data DATA′ and a system error correction code ECC_SYS′ by using the memory error correction code ECC_MEM in the read operation. The memory core 153 may include a cell array having a plurality of memory cells, and circuits for writing and reading data to and from the cell array.

The system ECC generation circuit 111 of the memory controller 110 may generate the system error correction code ECC_SYS for correcting an error, based on the data HOST_DATA transferred from the host in the write operation. That is to say, the system ECC generation circuit 111 may generate the system error correction code ECC_SYS for correcting an error of the data HOST_DATA by encoding the data HOST_DATA. In the write operation, since the system error correction code ECC_SYS is only generated and an error correction operation is not performed, the data HOST_DATA transferred from the host and the data DATA transferred from the memory controller 110 to the memory 150 may be the same. Referring to FIG. 2, it may be seen that the system error correction code ECC_SYS is generated by encoding the data DATA, that is, an error of the data DATA is covered by the system error correction code ECC_SYS.

The memory ECC generation circuit 151 of the memory 150 may generate the memory error correction code ECC_MEM for correcting an error, based on the data DATA and the system error correction code ECC_SYS transferred from the memory controller 110 in the write operation. In other words, the memory ECC generation circuit 151 may generate the memory error correction code ECC_MEM for correcting an error of the data DATA and the system error correction code ECC_SYS, by encoding the data DATA and the system error correction code ECC_SYS. In the write operation, since only the memory error correction code ECC_MEM is generated and an error correction operation is not performed, the data DATA and the system error correction code ECC_SYS inputted to the memory ECC generation circuit 151 and the data DATA′ and the system error correction code ECC_SYS′ outputted from the memory ECC generation circuit 151 may be the same. Referring to FIG. 2, it may be seen that the memory error correction code ECC_MEM is generated by encoding the data DATA and the system error correction code ECC_SYS, that is, an error of the data DATA and the system error correction code ECC_SYS is covered by the memory error correction code ECC_MEM.

In the write operation, the data DATA′, the system error correction code ECC_SYS′ and the memory error correction code ECC_MEM may be stored in the cell array of the memory core 153.

In the read operation, the data DATA′, the system error correction code ECC_SYS′ and the memory error correction code ECC_MEM may be read from the cell array of the memory core 153 and be transferred to the memory error correction circuit 152.

The memory error correction circuit 152 of the memory 150 may correct an error of the data DATA′ and the system error correction code ECC_SYS′ based on the memory error correction code ECC_MEM. The data DATA and the system error correction code ECC_SYS which are error-corrected by the memory error correction circuit 152 may be transferred to the memory controller 110.

The system error correction circuit 112 of the memory controller 110 may correct an error of the data DATA transferred from the memory 150, based on the system error correction code ECC_SYS transferred from the memory 150. The data HOST_DATA which is error-corrected by the system error correction circuit 112 may be transferred to the host.

The generation of the system error correction code ECC_SYS and the error correction operation by the system ECC generation circuit 111 and the system error correction circuit 112 of the memory controller 110 may be performed by the memory controller 110 capable of self-scheduling a time. Namely, the memory controller 110 may self-secure a sufficient time required for error correction. On the other hand, since the memory 150 needs to perform an operation instructed by the memory controller 110 within a preset time, it is impossible for the memory 150 to self-schedule a time. Thus, in most cases, the generation of the memory error correction code ECC_MEM and the error correction operation by the memory ECC generation circuit 151 and the memory error correction circuit 152 of the memory 150 are performed as hidden in a short time. That is to say, the memory controller 110 may not be aware that the additional memory error correction code ECC_MEM is stored in the memory 150, and may not be aware that the error correction operation is performed internally at the memory 150. Moreover, since the memory 150 needs to self-secure an additional capacity for storing the memory error correction code ECC_MEM, the bit number of the memory error correction code ECC_MEM cannot help but be relatively small.

Because the error correction operation of the memory error correction circuit 152 needs to be performed as hidden in a short time and the bit number of the memory error correction code ECC_MEM is small, the error detection and error correction capability of the memory error correction circuit 152 is inevitably inferior to that of the system error correction circuit 112. For example, while the system error correction circuit 112 may detect and correct an error of 1 symbol (1 symbol is multiple bits), the memory error correction circuit 152 may detect and correct an error of only 1 bit.

In the case where the error detection and error correction capability of the memory error correction circuit 152 is inferior to that of the system error correction circuit 112, the operation of the memory error correction circuit 152 may rather cause a concern in the operation of the system error correction circuit 112. This will be described below with reference to FIGS. 3A and 3B. In the following description, it is assumed that the data DATA is 32 bits, the system error correction code ECC_SYS is 8 bits and 1 symbol is 4 bits. Further, it is assumed that the system error correction circuit 112 may detect and correct an error of 1 symbol and the memory error correction circuit 152 may detect and correct an error of 1 bit.

FIG. 3A illustrates the data DATA′ of 32 bits and the system error correction code ECC_SYS′ of 8 bits, read from the memory core 153 of the memory 150. Parts partitioned by solid lines may represent 10 symbols, and parts partitioned by dotted lines in each of the symbols may represent data of 4 bits included in the corresponding symbol. The 2 bits denoted by ‘X’ in the drawing may represent error bits. Referring to FIG. 3A, it may be seen that errors of 2 bits are included in one symbol.

FIG. 3B illustrates the data DATA and the system error correction code ECC_SYS after the memory error correction circuit 152 performs the error correction operation for the data DATA′ and the system error correction code ECC_SYS′ of FIG. 3A based on the memory error correction code ECC_MEM. It may be seen that, since the number of errors exceeds 1 bit as the number of error bits which may be detected and corrected by the memory error correction circuit 152, an additional error of 1 bit is rather increased by the error correction operation of the memory error correction circuit 152. While errors of 2 bits are included in one symbol in FIG. 3A, it may be seen from FIG. 36 that errors of 2 bits are included in the same symbol as in FIG. 3A and an error of 1 bit is included in another symbol due to the malfunction of the memory error correction circuit 152.

The error correction operation of the memory error correction circuit 152, as shown in FIGS. 3B and 3A, may cause an error in the operation of the memory system 100. In FIG. 3A, since errors are included in one symbol, the errors may be corrected by the error correction operation of the system error correction circuit 112 of the memory controller 110. However, in FIG. 3B, since errors are included in two symbols, the errors may not be corrected even by the error correction operation of the system error correction circuit 112. In other words, there may be a concern with certain errors, which may be corrected by the system error correction circuit 112 if the error correction operation of the memory error correction circuit 152 is not performed, may not be corrected even by the system error correction circuit 112, due to the error correction operation of the memory error correction circuit 152.

In order to prevent such concern, the error detection capability of the memory error correction circuit 152 needs to be equal to or greater than the error detection capability of the system error correction circuit 112. Namely, even though the memory error correction circuit 152 may not correct an error, when the error occurs, the memory error correction circuit 152 needs to be able to figure out whether the error is an error which is correctable by itself or exceeds its correction capability. For example, when the errors as in FIG. 3A occur, if the memory error correction circuit 152 detects that errors of 2 bits have occurred, determines that the errors cannot be corrected by itself and transfers the data DATA′ and the system error correction code ECC_SYS′ to the system error correction circuit 112 as they are, the concern that the number of errors increases as shown in FIG. 3B may not be caused.

In order to increase the error detection capability of the memory error correction circuit 152, the bit number of the memory error correction code ECC_MEM needs to be increased. To this end, an additional capacity for storing the memory error correction code ECC_MEM needs to be secured in the memory 150, which is not easy to achieve. The above concern may be resolved also in the case where the error correction capability of the memory error correction circuit 152 is equal to or greater than that of the system error correction circuit 112. However, since it is not easy to secure a sufficient error correction time in the memory 150, actually, it is more difficult to increase the error correction capability of the memory error correction circuit 152.

FIG. 4 is a block diagram illustrating a memory system 400 in accordance with an embodiment of the present invention. FIG. 4 illustrates only components which are directly related to storage of data and error correction of data in the memory system 400.

Referring to FIG. 4, the memory system 400 may include a memory controller 410 and a memory 450.

The memory controller 410 may control the operations of the memory 150, such as read and write operations, according to a request of a host. The host may include a CPU, a GPU, an AP or the like. The memory controller 410 may be embedded inside the host or may exist separately outside the host. In the case where the memory controller 410 is embedded inside the host, host data HOST_DATA in the drawing may represent data which the memory controller 410 communicates with the other components of the host in the host. In the case where the memory controller 410 exists outside the host, the host data HOST_DATA in the drawing may represent data which the memory controller 410 communicates with the host. The memory controller 410 may include a system error correction code (ECC) generation circuit 411 and a system error correction circuit 412. The system error correction code (ECC) generation circuit 411 may generate a first system error correction code ECC_SYS_0 and a second system error correction code ECC_SYS_1 in a write operation. The system error correction circuit 412 may perform an error correction operation by using the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 in a read operation.

The memory 450 may store write data DATA, the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 received from the memory controller 410 in the write operation, and may transfer read data DATA, the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 stored in the memory 450 to the memory controller 410 in the read operation. The memory 450 may be one of all types of memories such as a DRAM, an HBM, a PCRAM and a flash memory. The memory 450 may include a memory error correction code (ECC) generation circuit 451, a memory error correction circuit 452 and a memory core 453. The memory ECC generation circuit 451 may generate a memory error correction code ECC_MEM in the write operation. The memory error correction circuit 452 may correct an error of data DATA′, a first system error correction code ECC_SYS_0′ and a second system error correction code ECC_SYS_1′ based on the second system error correction code ECC_SYS_1′ and the memory error correction code ECC_MEM in the read operation. The memory core 453 may include a cell array having a plurality of memory cells, and circuits for writing and reading data to and from the cell array.

The system ECC generation circuit 411 of the memory controller 410 may generate the first system error correction code ECC_SYS_0 based on the data HOST_DATA transferred from the host in the write operation. Further, the system ECC generation circuit 411 of the memory controller 410 may generate the second system error correction code ECC_SYS_1 by using the data HOST_DATA and the first system error correction code ECC_SYS_0. In the write operation, since the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 are only generated and an error correction operation is not performed, the data HOST_DATA transferred from the host and the data DATA transferred from the memory controller 410 to the memory 450 may be the same. Referring to FIG. 5, it may be seen that the first system error correction code ECC_SYS_0 is generated by encoding the data HOST_DATA and the second system error correction code ECC_SYS_1 is generated by encoding the data DATA and the first system error correction code ECC_SYS_0.

The memory ECC generation circuit 451 of the memory 450 may generate the memory error correction code ECC_MEM based on the data DATA and the first system error correction code ECC_SYS_0 transferred from the memory controller 410 in the write operation. In other words, the memory ECC generation circuit 451 may generate the memory error correction code ECC_MEM for correcting an error of the data DATA and the first system error correction code ECC_SYS_0, by encoding the data DATA and the first system error correction code ECC_SYS_0. In the write operation, since the memory error correction code ECC_MEM is only generated and an error correction operation is not performed, the data DATA and the first system error correction code ECC_SYS_0 inputted to the memory ECC generation circuit 451 and the data DATA′ and the first system error correction code ECC_SYS_0′ outputted from the memory ECC generation circuit 451 may be the same. The memory ECC generation circuit 451 may not use the second system error correction code ECC_SYS_1 in generation of the memory error correction code ECC_MEM. Namely, the memory ECC generation circuit 451 may bypass the second system error correction code ECC_SYS_1 as it is transferred from the memory controller 410. Therefore, in the write operation, the second system error correction code ECC_SYS_1 inputted to the memory ECC generation circuit 451 and the second system error correction code ECC_SYS_1′ outputted from the memory ECC generation circuit 451 may be the same. Referring to FIG. 5, it may be seen that the memory error correction code ECC_MEM is generated by encoding the data DATA and the first system error correction code ECC_SYS_0. It may be seen that the second system error correction code ECC_SYS_1 is generated by the system ECC generation circuit 411 and the memory error correction code ECC_MEM is generated by the memory ECC generation circuit 451, but the encoding targets of the two codes ECC_SYS_1 and ECC_MEM are the same.

In the write operation, the data DATA′, the first system error correction code ECC_SYS_0′, the second system error correction code ECC_SYS_1′ and the memory error correction code ECC_MEM may be stored in the cell array of the memory core 453.

In the read operation, the data DATA′, the first system error correction code ECC_SYS_0′, the second system error correction code ECC_SYS_1′ and the memory error correction code ECC_MEM may be read from the memory core 453 and be transferred to the memory error correction circuit 452.

The memory error correction circuit 452 of the memory 450 may correct an error of the data DATA′, the first system error correction code ECC_SYS_0′ and the second system error correction code ECC_SYS_1′ by using the second system error correction code ECC_SYS_1′ and the memory error correction code ECC_MEM. Although an error of the memory error correction code ECC_MEM may also be corrected, because the memory error correction code ECC_MEM is not used but discarded by the memory error correction circuit 452, and thus the error correction of the memory error correction code ECC_MEM may be omitted. Since the memory error correction circuit 452 uses not only the memory error correction code ECC_MEM but also the second system error correction code ECC_SYS_1′, the memory error correction circuit 452 may perform error detection and correction operations using an error correction code of a larger number of bits. That is to say, the memory error correction circuit 452 may have better error detection and correction capability than the memory error correction circuit 152 which uses only the memory error correction code ECC_MEM as illustrated in FIG. 1. The data DATA, the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 which are error-corrected by the memory error correction circuit 452 may be transferred to the memory controller 410. In the case where an error greater than the error correction capability of the memory error correction circuit 452 is detected by the memory error correction circuit 452, the memory 450 may notify the memory controller 410 that an error has occurred.

Here, the fact that an error of the data DATA′, the first system error correction code ECC_SYS_0′ and the second system error correction code ECC_SYS_1′ is corrected means that an error correction process for detecting and correcting the error thereof is performed by the memory error correction circuit 452, and does not mean that the error thereof is necessarily corrected. For example, in the case where an error thereof is not detected by the memory error correction circuit 452, the error may not be corrected.

The system error correction circuit 412 of the memory controller 410 may correct an error of the data DATA transferred from the memory 450, based on the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 transferred from the memory 450. The data HOST_DATA which is error-corrected by the system error correction circuit 412 may be transferred to the host. Here, the fact that an error of the data HOST_DATA is corrected means that the data HOST_DATA is generated as an error correction process for the data DATA is performed by the system error correction circuit 412, and does not mean that the error is necessarily corrected.

As described above with reference to FIGS. 3A and 3B, in order for the error correction operation of the memory error correction circuit 452 not to cause a concern in the error correction operation of the system error correction circuit 412, the error detection capability of the memory error correction circuit 452 needs to be equal to or greater than the error detection capability of the system error correction circuit 412. To this end, it may be essential that the number of bits of an error correction code to be used in the memory error correction circuit 452 be increased. In the embodiment of FIG. 4, since the memory error correction circuit 452 uses not only the memory error correction code ECC_MEM generated in the memory ECC generation circuit 451 but also a part (i.e., ECC_SYS_1′) of the system error correction codes ECC_SYS_0′ and ECC_SYS_1′ generated in the system ECC generation circuit 411, it may be easy to design the memory error correction circuit 452 to have the error detection capability equal to or greater than that of the system error correction circuit 412.

FIGS. 6 to 8 are diagrams for describing a process of generating the error correction codes ECC_SYS_0, ECC_SYS_1 and ECC_MEM.

FIG. 6 is a diagram for describing a process for the system ECC generation circuit 411 to generate the first system error correction code ECC_SYS_0 by encoding the data DATA. While FIG. 4 illustrates that the data DATA_HOST is inputted to the system ECC generation circuit 411, since the data DATA_HOST and the data DATA may be the same in the write operation, for the sake of convenience in explanation, FIG. 6 illustrates that the system ECC generation circuit 411 generates the first system error correction code ECC_SYS_0 by encoding the data DATA.

‘610’ of FIG. 6 may represent the data DATA of 32 bits and the first system error correction code ECC_SYS_0 of 8 bits that is to be generated using the data DATA of 32 bits. ‘0’ to ‘31’ may denote the respective bits of the data DATA, and ‘0’ to ‘7’ may denote the respective bits of the first system error correction code ECC_SYS_0. The data DATA may include 8 symbols, and each symbol may include data of 4 bits. For each symbol, the 4-bit data of a corresponding symbol is denoted by a hexadecimal number. In ‘610’, since all the data DATA of 32 bits are illustrated as having the value of ‘1’, each symbol may have a value of a hexadecimal number ‘F’. The first system error correction code ECC_SYS_0 may include 2 symbols. Since the first system error correction code ECC_SYS_0 is not generated yet, the respective bits of the first system error correction code ECC_SYS_0 are denoted by ‘?’.

‘620’ of FIG. 6 may represent a check matrix for generation of the first system error correction code ECC_SYS_0.

‘630’ of FIG. 6 may represent a result of performing a calculation on the data 610 by using the check matrix 620. In the check matrix 620, portions whose values are ‘1’ are significant. In the case where data 610 existing at the same x-axis as a portion whose value is ‘1’ in the check matrix 620 is ‘1’, the value of a corresponding portion may be calculated as ‘1’. In the case where data 610 existing at the same x-axis as a portion whose value is ‘1’ in the check matrix 620 is ‘0’, the value of a corresponding portion may be calculated as ‘0’. Since all the data 610 are illustrated as ‘1’, ‘630’ may be generated in the same form as the check matrix 620.

‘640’ of FIG. 6 illustrates a process of generating the first system error correction code ECC_SYS_0 by using the calculation result 630. Referring to ‘640’, it may be seen that the respective bits of the first system error correction code ECC_SYS_0 are generated depending on whether the number of ‘1’s existing on the same y-axis in ‘630’ is even or odd. In the case where the number of ‘1’s existing on the same y-axis in ‘630’ is even, a corresponding bit of the first system error correction code ECC_SYS_0 may be generated as ‘0’, and in the case where the number of ‘1’s existing on the same y-axis in ‘630’ is odd, a corresponding bit of the first system error correction code ECC_SYS_0 may be generated as ‘1’. Referring to ‘640’, it may be seen that the first system error correction code ECC_SYS_0 is generated as (0,1,1,1,1,0,1,1). In ‘640’, ‘7’ and ‘B’ denote the first system error correction code ECC_SYS_0 in hexadecimal numbers by the unit of symbol.

‘650’ of FIG. 6 illustrates together the data DATA of 32 bits (i.e., 8 symbols) and the first system error correction code ECC_SYS_0 of 8 bits (i.e., 2 symbols) generated by encoding the data DATA. By performing a calculation through substituting ‘650’ into the check matrix 620, it may be seen that, when summing the numbers of ‘1’s existing on the same y-axis, all the numbers are even.

The first system error correction code ECC_SYS_0 generated in the manner illustrated in FIG. 6 is also referred to as a cyclic redundancy check (CRC) code.

FIG. 7 is a diagram for describing a process for the system ECC generation circuit 411 to generate the second system error correction code ECC_SYS_1 by encoding the data DATA and the first system error correction code ECC_SYS_0.

‘710’ of FIG. 7 may represent the data DATA and the first system error correction code ECC_SYS_0 as encoding targets for generation of the second system error correction code ECC_SYS_1, and the second system error correction code ECC_SYS_1 generated by encoding them DATA and ECC_SYS_0.

‘720’ of FIG. 7 may represent a check matrix for generation of the second system error correction code ECC_SYS_1.

‘730’ of FIG. 7 may represent a result of performing a calculation on the data DATA and the first system error correction code ECC_SYS_0 by using the check matrix 720. The calculation may be performed in the same manner as in ‘630’ of FIG. 6.

‘740’ of FIG. 7 illustrates a process of generating the second system error correction code ECC_SYS_1 by using the calculation result 730. The generation of the second system error correction code ECC_SYS_1 in ‘740’ may be performed in the same manner as the generation of the first system error correction code ECC_SYS_0 in ‘640’. Referring to ‘740’, it may be seen that the second system error correction code ECC_SYS_1 is generated as (1,1,0,0). ‘C’ of ‘740’ represents the second system error correction code ECC_SYS_1 in a hexadecimal number.

The first bit of the second system error correction code ECC_SYS_1 may represent whether the number of bits having the value of ‘1’ among the first bits of the respective symbols of the data DATA and the first system error correction code ECC_SYS_0 is even or odd, the second bit of the second system error correction code ECC_SYS_1 may represent whether the number of bits having the value of ‘1’ among the second bits of the respective symbols of the data DATA and the first system error correction code ECC_SYS_0 is even or odd, the third bit of the second system error correction code ECC_SYS_1 may represent whether the number of bits having the value of ‘1’ among the third bits of the respective symbols of the data DATA and the first system error correction code ECC_SYS_0 is even or odd, and the fourth bit of the second system error correction code ECC_SYS_1 may represent whether the number of bits having the value of ‘1’ among the fourth bits of the respective symbols of the data DATA and the first system error correction code ECC_SYS_0 is even or odd. In other words, each bit of the second system error correction code ECC_SYS_1 may represent whether the number of bits having the value of ‘1’ among the bits of the same position in the symbols of the data DATA and the first system error correction code ECC_SYS_0 is even or odd. A code such as the second system error correction code ECC_SYS_1 is generally referred to as a simple parity code.

‘750’ of FIG. 7 illustrates together the data DATA, the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 generated by encoding them DATA and ECC_SYS_0. By performing a calculation through substituting ‘750’ into the check matrix 720, it may be seen that, when summing the numbers of ‘1’s existing on the same y-axis, all the numbers are even.

When the system error correction circuit 412 of the memory controller 410 corrects an error of the data DATA by using the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1, through using the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 as illustrated in FIG. 7, the system error correction circuit 412 may detect and correct an error of 1 symbol in the data DATA.

FIG. 8 is a diagram for describing a process for the memory ECC generation circuit 451 to generate the memory error correction code ECC_MEM by encoding the data DATA and the first system error correction code ECC_SYS_0.

‘810’ of FIG. 8 may represent the data DATA and the first system error correction code ECC_SYS_0 as encoding targets for generation of the memory error correction code ECC_MEM, and a code ECC_NEED_FOR_MEM needed for the memory error correction circuit 452 to generate the memory error correction code ECC_MEM by encoding them DATA and ECC_SYS_0. By using the code ECC_NEED_FOR_MEM of 10 bits, the memory error correction circuit 452 may correctly detect successive errors of 4 bits, and is able to correct an error of 1 bit. Namely, by using the code ECC_NEED_FOR_MEM of 10 bits, the memory error correction circuit 452 may have error detection capability equal to or greater than that of the system error correction circuit 412.

‘820’ of FIG. 8 may represent a check matrix for generation of the code ECC_NEED_FOR_MEM of 10 bits. By observing the check matrix 820, it may be seen that a portion 821 corresponding to a code of 6 bits is new but a portion 822 corresponding to a code of 4 bits is perfectly the same as the check matrix 720. That is to say, 4 bits of the code ECC_NEED_FOR_MEM of 10 bits are perfectly the same as the second system error correction code ECC_SYS_1. Since 4 bits in the code ECC_NEED_FOR_MEM of 10 bits needed for the memory error correction circuit 452 are already generated by the system ECC generation circuit 411, the memory error correction code generation circuit 451 may generate only the remaining 6 bits in the code ECC_NEED_FOR_MEM of 10 bits. The code of these 6 bits may be the memory error correction code ECC_MEM.

‘830’ of FIG. 8 may represent a result of performing a calculation on the data DATA and the first system error correction code ECC_SYS_0 by using the portion 821 of the check matrix 820. The calculation may be performed in the same manner as in ‘630’ of FIG. 6.

‘840’ of FIG. 8 illustrates a process of generating the memory error correction code ECC_MEM by using the calculation result 830. The generation of the memory error correction code ECC_MEM in ‘840’ may be performed in the same manner as the generation of the first system error correction code ECC_SYS_0 in ‘640’. Referring to ‘840’, it may be seen that the memory error correction code ECC_MEM is generated as (1,0,0,1,0,0) corresponding to values ‘2’ and ‘4’.

‘850’ of FIG. 8 illustrates together the data DATA, the first system error correction code ECC_SYS_0, the second system error correction code ECC_SYS_1 and the memory error correction code ECC_MEM generated by the memory ECC generation circuit 451.

FIG. 9 is a diagram for describing a process for the memory error correction circuit 452 to detect and correct an error by using the second system error correction code ECC_SYS_1′ and the memory error correction code ECC_MEM. The memory error correction circuit 452 may correct an error of up to 1 bit and may detect an error of up to successive 4 bits.

‘910’ of FIG. 9 represents the data DATA′, the first system error correction code ECC_SYS_0′, the second system error correction code ECC_SYS_1′ and the memory error correction code ECC_MEM which are read from the memory core 453. Referring to ‘910,’ it may be seen that an error in which 21 among 0 to 31 of the data DATA′ is changed to ‘0’ exists.

‘920’ of FIG. 9 may represent a check matrix which the memory error correction circuit 452 uses to correct an error. The check matrix 920 may be the same as the check matrix 820 shown in FIG. 8.

‘930’ of FIG. 9 may represent a result of performing a calculation on the data DATA′, the first system error correction code ECC_SYS_0′, the second system error correction code ECC_SYS_1′ and the memory error correction code ECC_MEM, by using the check matrix 920. This calculation may be performed in the same manner as in ‘630’.

‘940’ of FIG. 9 may represent whether the number of ‘1’s on the same y-axis in the calculation result 930 is odd or even. In this case, ‘940’ may be generated as (1,1,0,0,0,0,0,1,0,0) indicating the position of an error. In the check matrix 920, a portion corresponding to (1,1,0,0,0,0,0,1,0,0) corresponds to ‘21’ among ‘0’ to ‘31’ of the data DATA, and indicates the position of an error. The memory error correction circuit 452 may correct an error by inverting an error portion. The series of calculation processes of ‘930’ and ‘940’ are referred to as a syndrome calculation.

In the case where the calculation result 940 is (0,0,0,0,0,0,0,0,0,0), it may be indicated that there is no error. In the case where the calculation result 940 is not (0,0,0,0,0,0,0,0,0,0) and a portion the same as the calculation result 940 does not exist in the check matrix 920, it may be indicated that an error uncorrectable by the memory error correction circuit 452 has occurred, that is, errors of 2 or more bits have occurred.

Hereunder, a process for the system error correction circuit 412 to correct an error will be described. The system error correction circuit 412 may detect an error by using the first system error correction code ECC_SYS_0, that is, the CRC code, and may correct an error of the data DATA in such a way to restore a symbol by using the second system error correction code ECC_SYS_1, that is, the simple parity code. To this end, a series of operations may be repeated until no error is detected. The series of operations may include, for example, (1) detecting whether there is an error, through a CRC calculation using the first system error correction code ECC_SYS_0, (2) restoring a first symbol through parity calculation using the second system error correction code ECC_SYS_1 while assuming that an error exists in the first symbol of the data DATA, (3) detecting whether there is an error, through a CRC calculation using the first system error correction code ECC_SYS_0 with the first symbol of the data DATA restored, (4) restoring the second symbol through parity calculation using the second system error correction code ECC_SYS_1 while assuming that an error exists in the second symbol of the data DATA, (5) detecting whether there is an error, through a CRC calculation using the first system error correction code ECC_SYS_0 with the second symbol of the data DATA restored, (6) restoring the third symbol by parity calculation using the second system error correction code ECC_SYS_1 while assuming that an error exists in the third symbol of the data DATA, and (7) detecting whether there is an error, through a CRC calculation using the first system error correction code ECC_SYS_0 with the third symbol of the data DATA restored may be repeated until an error is not detected. In this way, the system error correction circuit 412 is able to correct an error of 1 symbol.

FIG. 10 is a block diagram illustrating a representation of an example of a memory system 1000 in accordance with an embodiment of the present invention. FIG. 10 illustrates only components which are directly related to storage of data and error correction of data in the memory system 1000.

Referring to FIG. 10, the memory system 1000 may include a memory controller 1010 and a memory 1050.

The memory controller 1010 may control the operations of the memory 150, such as read and write operations, according to a request of a host. The host may include a CPU, a GPU, an AP or the like. The memory controller 1010 may be embedded inside the host or may exist separately outside the host. In the case where the memory controller 1010 is embedded inside the host, host data HOST_DATA in the drawing may represent data which the memory controller 1010 communicates with the other components of the host in the host. In the case where the memory controller 1010 exists outside the host, the host data HOST_DATA in the drawing may represent data which the memory controller 1010 communicates with the host. The memory controller 1010 may include a system error correction code (ECC) generation circuit 1011 and a system error correction circuit 1012. The system error correction code (ECC) generation circuit 1011 may generate a first system error correction code ECC_SYS_0 and a second system error correction code ECC_SYS_1, in a write operation. The system error correction circuit 1012 may perform an error correction operation based on the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1, in a read operation.

The memory 1050 may store write data DATA, the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 which are received from the memory controller 1010, in the write operation, and may transfer read data DATA, the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 which are stored in the memory 1050 to the memory controller 1010, in the read operation. The memory 1050 may be one of all types of memories such as a DRAM, an HBM, a PCRAM and a flash memory. The memory 1050 may include a memory error correction code (ECC) generation circuit 1051, a memory error correction circuit 1052 and a memory core 1053. The memory ECC generation circuit 1051 may generate a first memory error correction code ECC_MEM_0 and a second memory error correction code ECC_MEM_1, in the write operation. The memory error correction circuit 1052 may correct an error of data DATA′ and a first system error correction code ECC_SYS_0′ based on the first system error correction code ECC_SYS_0′ and the first memory error correction code ECC_MEM_0, and correct an error of a second system error correction code ECC_SYS_1′ based on the second memory error correction code ECC_MEM_1, in the read operation. The memory core 1053 may include a cell array which includes a plurality of memory cells, and circuits for writing and reading data to and from the cell array.

The system ECC generation circuit 1011 of the memory controller 1010 may generate the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 by using the data HOST_DATA transferred from the host, in the write operation. That is to say, the first system error correction code ECC_SYS_0 may be generated by encoding the data HOST_DATA, and the second system error correction code ECC_SYS_1 may be generated also by encoding the data HOST_DATA. In the write operation, since the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 are only generated and an error correction operation is not performed, the data HOST_DATA transferred from the host and the data DATA transferred from the memory controller 1010 to the memory 1050 may be the same. Referring to FIG. 11, it may be seen that the first system error correction code ECC_SYS_0 is generated by encoding the data DATA and the second system error correction code ECC_SYS_1 is generated also by encoding the data DATA.

The memory ECC generation circuit 1051 of the memory 1050 may generate the first memory error correction code ECC_MEM_0 by using the data DATA transferred from the memory controller 1010, and generate the second memory error correction code ECC_MEM_1 by using the second system error correction code ECC_SYS_1, in the write operation. That is to say, the first memory error correction code ECC_MEM_0 may be generated by encoding the data DATA, and the second memory error correction code ECC_MEM_1 may be generated by encoding the second system error correction code ECC_SYS_1. In the write operation, since the first memory error correction code ECC_MEM_0 and the second memory error correction code ECC_MEM_1 are only generated and an error correction operation is not performed, the data DATA, the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 which are inputted to the memory ECC generation circuit 1051 and the data DATA′, the first system error correction code ECC_SYS_0′ and the second system error correction code ECC_SYS_1′ outputted from the memory ECC generation circuit 1051 may be the same. The memory ECC generation circuit 1051 may bypass the first system error correction code ECC_SYS_0 as it is transferred from the memory controller 410. Referring to FIG. 11, it may be seen that the first memory error correction code ECC_MEM_0 is generated by encoding the data DATA and the second memory error correction code ECC_MEM_1 is generated by encoding the second system error correction code ECC_SYS_1.

In the write operation, the data DATA′, the first system error correction code ECC_SYS_0′, the second system error correction code ECC_SYS_1′, the first memory error correction code ECC_MEM_0 and the second memory error correction code ECC_MEM_1 may be stored in the memory core 1053 of the memory 1050.

In the read operation, the data DATA′, the first system error correction code ECC_SYS_0′, the second system error correction code ECC_SYS_1′, the first memory error correction code ECC_MEM_0 and the second memory error correction code ECC_MEM_1 may be read from the memory core 1053, and be transferred to the memory error correction circuit 1052.

The memory error correction circuit 1052 of the memory 1050 may correct an error of the data DATA′ and the first system error correction code ECC_SYS_0′ based on the first system error correction code ECC_SYS_0′ and the first memory error correction code ECC_MEM_0. Although an error of the first memory error correction code ECC_MEM_O may also be corrected, the first memory error correction code ECC_MEM_0 is not used but discarded by the memory error correction circuit 1052, and thus the error correction of the first memory error correction code ECC_MEM_0 may be omitted. Also, the memory error correction circuit 1052 may correct an error of the second system error correction code ECC_SYS_1′ based on the second memory error correction code ECC_MEM_1. Since the memory error correction circuit 1052 uses not only the first memory error correction code ECC_MEM_0 but also the first system error correction code ECC_SYS_0′, the memory error correction circuit 1052 may perform error detection and correction operations using an error correction code of a larger number of bits. That is to say, the memory error correction circuit 1052 may have better error detection and correction capability than the memory error correction circuit 152 which uses only the memory error correction code ECC_MEM as illustrated in FIG. 1. In the case where an error greater than the error correction capability of the memory error correction circuit 1052 is detected by the memory error correction circuit 1052, the memory 1050 may notify the memory controller 1010 of that an error has occurred.

Here, the fact that an error of the data DATA′, the first system error correction code ECC_SYS_0′ and the second system error correction code ECC_SYS_1′ is corrected means that an error correction process for detecting and correcting the error thereof is performed by the memory error correction circuit 1052, and does not mean that the error thereof is necessarily corrected. For example, in the case where an error thereof is not detected by the memory error correction circuit 1052, the error may not be corrected.

The system error correction circuit 1012 of the memory controller 1010 may correct an error of the data DATA transferred from the memory 1050, based on the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 transferred from the memory 1050. The data HOST_DATA which is error-corrected by the system error correction circuit 1012 may be transferred to the host. Here, the fact that an error of the data HOST_DATA is corrected means that the data HOST_DATA is generated as an error correction process for the data DATA is performed by the system error correction circuit 1012, and does not mean that the error is necessarily corrected.

In the embodiment of FIG. 10, since the memory error correction circuit 1052 uses not only the first memory error correction code ECC_MEM_0 generated in the memory ECC generation circuit 1051 but also the first system error correction code ECC_SYS_0′, it may be easy to design the memory error correction circuit 1052 to have the error detection capability of equal to or greater than that of the system error correction circuit 1012. Further, because the memory error correction circuit 1052 corrects an error of the second system error correction code ECC_SYS_1′ based on the second memory error correction code ECC_MEM_1, it is also possible to prepare for an error which occurs in the second system error correction code ECC_SYS_1′.

FIGS. 12 to 14 are diagrams for describing a process of generating the error correction codes ECC_SYS_0, ECC_MEM_0 and ECC_MEM_1.

FIG. 12 is a diagram for describing a process for the system ECC generation circuit 1011 to generate the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 by encoding the data DATA. While FIG. 10 illustrates that the data DATA_HOST is inputted to the system ECC generation circuit 1011, since the data DATA_HOST and the data DATA may be the same in the write operation, for the sake of convenience in explanation, FIG. 12 illustrates that the system ECC generation circuit 1011 generates the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 by encoding the data DATA.

‘1210’ of FIG. 12 may represent the data DATA of 32 bits, and the first system error correction code ECC_SYS_0 of 4 bits and the second system error correction code ECC_SYS_1 of 4 bits that is to be generated using the data DATA of 32 bits. The data DATA may include 8 symbols, and each symbol may include data of 4 bits. For each symbol, the 4-bit data of a corresponding symbol is denoted by a hexadecimal number. In ‘1210’, since all the data DATA of 32 bits are illustrated as having the value of ‘1’, each symbol may have a value of a hexadecimal number ‘F’. Since the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 are not generated yet, the respective bits thereof are denoted by ‘?’.

‘1220’ of FIG. 12 may represent a check matrix for generation of the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1.

‘1230’ of FIG. 12 may represent a result of performing a calculation on the data 1210 by using the check matrix 1220. The calculation may be performed in the same manner as in ‘630’ of FIG. 6.

‘1240’ of FIG. 12 illustrates a process of generating the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 by using the calculation result 1230. The generation of the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 in ‘1240’ may be performed in the same manner as the generation of the first system error correction code ECC_SYS_0 in ‘640’. Referring to ‘1240’, it may be seen that the first system error correction code ECC_SYS_0 is generated as (0,0,0,0) corresponding to a value ‘0’, and the second system error correction code ECC_SYS_1 is generated as (1,1,1,0) corresponding to a value ‘E’. A code obtained by summing the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 generated in this way is referred to as a Reed Solomon (RS) type code.

‘1250’ of FIG. 12 illustrates together the data DATA, and the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 generated by encoding the data DATA.

Since the system error correction circuit 1012 of the memory controller 1010 corrects an error of the data DATA based on the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 as illustrated in FIG. 12, the system error correction circuit 1012 may detect and correct an error of 1 symbol in the data DATA.

FIG. 13 is a diagram for describing a process for the memory ECC generation circuit 1051 to generate the first memory error correction code ECC_MEM_0 by encoding the data DATA.

‘1310’ of FIG. 13 may represent the data DATA as an encoding target for generation of the first memory error correction code ECC_MEM_0, and a code ECC_NEED_FOR_MEM needed for the memory error correction circuit 1052 to generate the first memory error correction code ECC_MEM_0 by encoding the data DATA. By using the code ECC_NEED_FOR_MEM of 9 bits, the memory error correction circuit 1052 is able to correctly detect successive errors of 4 bits, and is able to correct an error of 1 bit. Namely, by using the code ECC_NEED_FOR_MEM of 9 bits, the memory error correction circuit 1052 may have error detection capability equal to or greater than that of the system error correction circuit 1012.

‘1320’ of FIG. 13 may represent a check matrix for generation of the code ECC_NEED_FOR_MEM of 9 bits. By observing the check matrix 1320, it may be seen that a portion 1321 corresponding to a code of 5 bits is new but a portion 1322 corresponding to a code of 4 bits is perfectly the same as a portion corresponding to the first system error correction code ECC_SYS_0 in the check matrix 1220. In other words, since 4 bits in the code ECC_NEED_FOR_MEM of 9 bits needed for the memory error correction circuit 1052 are the same as the first system error correction code ECC_SYS_0 already generated by the system ECC generation circuit 1011, the memory ECC generation circuit 1051 may generate only the remaining 5 bits in the code ECC_NEED_FOR_MEM of 9 bits. The code of these 5 bits may be the first memory error correction code ECC_MEM_0.

‘1330’ of FIG. 13 may represent a result of performing a calculation on the data DATA by using the portion 1321 of the check matrix 1320. The calculation may be performed in the same manner as in ‘630’ of FIG. 6.

‘1340’ of FIG. 13 illustrates a process of generating the first memory error correction code ECC_MEM_0 by using the calculation result 1330. The generation of the first memory error correction code ECC_MEM_0 in ‘1340’ may be performed in the same manner as the generation of the first system error correction code ECC_SYS_0 in ‘640’. Referring to ‘1340’, it may be seen that the first memory error correction code ECC_MEM_0 is generated as (0,0,0,0,0) corresponding to values ‘0’ and ‘0’.

‘1350’ of FIG. 13 illustrates together the data DATA, the first system error correction code ECC_SYS_0 generated by the system ECC generation circuit 1011 and the first memory error correction code ECC_MEM_0 generated by the memory ECC generation circuit 1051.

FIG. 14 is a diagram for describing a process for the memory ECC generation circuit 1051 to generate the second memory error correction code ECC_MEM_1 by encoding the second system error correction code ECC_SYS_1.

‘1410’ of FIG. 14 may represent the second system error correction code ECC_SYS_1 as an encoding target for generation of the second memory error correction code ECC_MEM_1, and the second memory error correction code ECC_MEM_1 generated by encoding the second system error correction code ECC_SYS_1.

‘1420’ of FIG. 14 may represent a check matrix for generation of the second memory error correction code ECC_MEM_1, and ‘1430’ and ‘1440’ may represent calculation processes for generating the second memory error correction code ECC_MEM_1 by using the check matrix 1420. Referring to ‘1440’, it may be seen that the second memory error correction code ECC_MEM_1 is generated as (1,0,0,0) corresponding a value of ‘8’.

‘1450’ of FIG. 14 illustrates together the second system error correction code ECC_SYS_1, and the second memory error correction code ECC_MEM_1 generated by the memory ECC generation circuit 1051. The memory error correction circuit 1052 may correct an error of 1 bit occurred in the second system error correction code ECC_SYS_1, by using the second memory error correction code ECC_MEM_1.

Meanwhile, the memory error correction circuit 1052 may detect and correct an error of the data DATA′, the first system error correction code ECC_SYS_0′ and the first memory error correction code ECC_MEM_0 through a syndrome calculation using them DATA′, ECC_SYS_0′ and ECC_MEM_0. The memory error correction circuit 1052 may detect successive errors of up to 4 bits and may correct an error of 1 bit.

In addition, the memory error correction circuit 1052 may detect and correct an error of the second system error correction code ECC_SYS_1′ and the second memory error correction code ECC_MEM_1 through a syndrome calculation using them ECC_SYS_1′ and ECC_MEM_1. The memory error correction circuit 1052 may detect and correct an error of 1 bit which has occurred in the second system error correction code ECC_SYS_1′.

The system error correction circuit 1012 may correct an error of the data DATA by the unit of symbol, by using the first system error correction code ECC_SYS_0 and the second system error correction code ECC_SYS_1 (i.e., an RS type code).

Although various embodiments have been described for illustrative purposes, it will be apparent to those skilled in the art that various changes and modifications may be made without departing from the spirit and scope of the invention as defined in the following claims.

In particular, as a matter of course, the numbers of bits of the data and the error correction codes exemplified in the above embodiments may be different from those of the above examples. 

What is claimed is:
 1. A memory system comprising, a memory controller including: a system error correction code generation circuit configured to generate a first system error correction code and a second system error correction code based on write data; and a memory including: a memory error correction code generation circuit configured to generate a first memory error correction code based on the write data transferred from the memory controller, and generate a second memory error correction code based on the second system error correction code transferred from the memory controller, and a memory core configured to store the write data, the first system error correction code, the second system error correction code, the first memory error correction code and the second memory error correction code.
 2. The memory system according to claim 1, wherein the memory further includes: a memory error correction circuit configured to correct an error of read data and a first system error correction code corresponding to the read data, which are read from the memory core, based on the first system error correction code and a first memory error correction code corresponding to the read data, which are read from the memory core, and correct an error of a second system error correction code corresponding to the read data, which is read from the memory core, based on a second memory error correction code read from the memory core, and wherein, in a read operation, the memory transfers the error-corrected read data and the error-corrected first and second system error correction codes to the memory controller.
 3. The memory system according to claim 2, wherein the memory controller further includes: a system error correction circuit configured to correct an error of the error-corrected read data transferred from the memory, based on the error-corrected first and second system error correction codes transferred from the memory.
 4. The memory system according to claim 3, wherein the system error correction circuit has error correction capability better than error correction capability of the memory error correction circuit.
 5. The memory system according to claim 3, wherein the memory error correction circuit has error detection capability equal to or greater than error detection capability of the system error correction circuit.
 6. The memory system according to claim 2, wherein, when the memory error correction circuit detects an error greater than its own error correction capability, the memory notifies the memory controller of that an error has occurred.
 7. A method for operating a memory system including a memory controller and a memory, the method comprising: generating, by the memory controller, a first system error correction code and a second system error correction code based on write data; transferring, by the memory controller, the write data, the first system error correction code and the second system error correction code to the memory from; generating, by the memory, a first memory error correction code based on the write data transferred from the memory controller; generating, by the memory, a second memory error correction code based on the second system error correction code transferred from the memory controller; and storing, by the memory, the write data, the first system error correction code, the second system error correction code, the first memory error correction code and the second memory error correction code, in a memory core included in the memory.
 8. The method according to claim 7, further comprising: reading, by the memory, read data, and a first system error correction code corresponding to the read data, a second system error correction code corresponding to the read data, a first memory error correction code corresponding to the read data and a second memory error correction code corresponding to the read data, from the memory core; correcting, by the memory, an error of the read data and the first system error correction code read from the memory core, based on the first system error correction code and the first memory error correction code which are read from the memory core; and correcting, by the memory, an error of the second system error correction code read from the memory core, based on the second memory error correction code read from the memory core, by the memory; and transferring, by the memory, the error-corrected read data and the error-corrected first and second system error correction codes to the memory controller.
 9. The method according to claim 8, further comprising: correcting, by the memory controller, an error of the error-corrected read data transferred from the memory, based on the error-corrected first and second system error correction codes transferred from the memory.
 10. The method according to claim 9, wherein error correction capability of the memory controller for the error-corrected read data is better than error correction capability of the memory for the read data read from the memory core.
 11. The method according to claim 9, wherein error detection capability of the memory for the read data read from the memory core is equal to or greater than error detection capability of the memory controller for the error-corrected read data.
 12. The method according to claim 8, further comprising: when an error greater than error correction capability is detected, notifying, by the memory, the memory controller of that an error has occurred.
 13. A memory system comprising: a memory controller configured to generate a first system error correction code and a second system error correction code based on data to be written, in a write operation; and a memory: in the write operation, configured to generate a first memory error correction code based on the data transferred from the memory controller, and generate a second memory error correction code based on the second system error correction code transferred from the memory controller, and store the data, the first and second system error correction codes and the first and second memory error correction codes, in a memory core included in the memory, and in a read operation, configured to correct an error of the data and the first system error correction code which are read from the memory core, based on the first system error correction code and the first memory error correction code which are read from the memory core, correct an error of the second system error correction code read from the memory core, based on the second memory error correction code read from the memory core, and transfer the error-corrected data and the error-corrected first and second system error correction codes to the memory controller.
 14. The memory system according to claim 13, wherein, in the read operation, the memory controller is configured to correct an error of the error-corrected data transferred from the memory, based on the error-corrected first and second system error correction codes transferred from the memory.
 15. The memory system according to claim 14, wherein the memory controller has error correction capability better than error correction capability of the memory for the data read from the memory core.
 16. The memory system according to claim 14, wherein the memory has error detection capability equal to or greater than error detection capability of the memory controller for the error-corrected data.
 17. The memory system according to claim 14, wherein each of the first system error correction code and the second system error correction code is generated as a cyclic redundancy check (CRC) code.
 18. The memory system according to claim 17, wherein the first system error correction code and the second system error correction code together form a Reed Solomon (RS) type code.
 19. The memory system according to claim 13, wherein the memory corrects an error of the data and the first system error correction code through a syndrome calculation using the data, the first system error correction code and the first memory error correction code.
 20. The memory system according to claim 13, wherein the memory corrects an error of the second system error correction code through a syndrome calculation using the second system error correction code and the second memory error correction code. 